package com.sugar.subscribe.course.module.business.service.coach;

import java.util.*;
import javax.validation.*;
import com.sugar.subscribe.course.module.business.controller.admin.coach.vo.*;
import com.sugar.subscribe.course.module.business.controller.admin.venue.vo.VenueSimpleRespVO;
import com.sugar.subscribe.course.module.business.controller.app.coach.vo.*;
import com.sugar.subscribe.course.module.business.controller.app.serviceclass.vo.AppServiceClassRespVO;
import com.sugar.subscribe.course.module.business.dal.dataobject.coach.CoachDO;
import com.sugar.subscribe.course.framework.common.pojo.PageResult;
import com.sugar.subscribe.course.module.system.api.auth.dto.AppAuthDTO;

/**
 * 教练信息 Service 接口
 *
 * @author Ysugar
 */
public interface CoachService {

    /**
     * 创建教练信息
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createCoach(@Valid CoachSaveReqVO createReqVO);

    /**
     * 更新教练信息
     *
     * @param updateReqVO 更新信息
     */
    void updateCoach(@Valid CoachSaveReqVO updateReqVO);

    /**
     * 删除教练信息
     *
     * @param id 编号
     */
    void deleteCoach(Long id);

    /**
    * 批量删除教练信息
    *
    * @param ids 编号
    */
    void deleteCoachListByIds(List<Long> ids);

    CoachDO getCoachValidate(Long id);

    /**
     * 获得教练信息
     *
     * @param id 编号
     * @return 教练信息
     */
    CoachDO getCoach(Long id);

    CoachDetailRespVO getCoachDetail(Long id);

    /**
     * 获得教练信息分页
     *
     * @param pageReqVO 分页查询
     * @return 教练信息分页
     */
    PageResult<CoachDO> getCoachPage(CoachPageReqVO pageReqVO);

    void auditCoach(CoachAuditReqVO auditReqVO);

    void updateCoachAmount(@Valid CoachAmountUpdateReqVO amountUpdateReqVO);

    List<AppServiceClassRespVO> getCoachServiceClassListByCoachId(Long coachId);

    List<AppServiceClassRespVO> getCoachServiceClassTreeByCoachId(Long coachId);

    List<CoachSimpleRespVO> getAllCoach();

    // ======================================== 其它 接口 ========================================

    void updateCoachReceivedOrderDuration(Long coachId);

    // ======================================== APP 接口 ========================================

    AppAuthDTO coachApply(AppBizUserCoachApplyReqVO coachApplyReqVO, Long userId);

    void appUpdateCoach(AppBizUserCoachApplyReqVO updateReqVO, Long coachId);

    void updateCoachWork(Boolean isWork, Long coachId);

    AppAuthDTO login(Long userId);

    AppBizCoachRespVO appGetCoach(Long coachId);

    PageResult<AppBizCoachHomePageRespVO> getCoachHomePage(@Valid AppBizCoachHomePageReqVO reqVO);

    AppBizCoachDetailRespVO appGetCoachDetail(Long coachId);

    List<VenueSimpleRespVO> getCoachVenueListByCoachId(Long coachId, Long cityId);
}